//搭建一个静态资源服务器
//当客户端请求服务器的时候,服务器会根据请求的url,返回对应的资源

const http = require('http');//引入http模块
const url = require('url');//引入url模块
const path = require('path');//引入path模块
const fs = require('fs');//引入fs模块

//获取到请求路径,根据请求路径,返回对应的资源
function getStaticResource(urlObj){
    //获取请求路径
    const pathname = urlObj.pathname;
    console.log('请求路径为:',pathname);
    let filename = '';
    filename = path.resolve(__dirname,"public",pathname.slice(1));
    //判断文件是否存在
    if(fs.existsSync(filename)){
        //判断文件是否是文件夹
        if(fs.statSync(filename).isDirectory()){
            filename = path.resolve(filename,"index.html");//拼接一个index.html文件
            if(fs.existsSync(filename)){//目录下拼接默认文件并判断是否存在
                return filename;
            }else{
                return null;
            }
        }else{
            return filename;
        }
       
    }else{
        return null; //如果文件不存在,返回null
    }
}

//定义服务器的处理函数
function handler(req,res){
    //获取请求的url
    const urlObj = url.parse(req.url,true); //解析成url对象
    console.log(urlObj);
    const filename = getStaticResource(urlObj);
    if(filename){
        fs.readFile(filename,(err,data)=>{
            res.setHeader('Content-Type', 'text/html;charset=utf-8');
            res.setHeader('Content-Length', data.length);
            res.write(data);
            res.end();
        })
    }else{
        res.write('404');
        res.end();
    }
}

const server = http.createServer(handler);

server.listen(6001,()=>{ //6000端口被浏览器认为是一个不安全的端口,所以需要使用6001端口
    console.log('服务器启动成功');
})
